package com.weitu.permission.department.service;

import com.weitu.base.entity.Tree;
import com.weitu.permission.department.entity.Department;

import java.util.List;
import java.util.Map;

public interface DepartmentService {

    /**
     * 根据父类的Id 查询所有的子级
     *
     * @param parentId 组织机构Id
     * @return 部门列表
     */
    List<Department> findByParentId(String parentId);


    /**
     *
     * @param parentId 父级组织机构Id
     * @return code
     */
    String findCodeByParentId(String parentId);
    /**
     * 根据id 查询部门
     *
     * @param id id
     * @return 部门
     */
    Department findById(String id);

    /**
     * 根据code 查询部门
     *
     * @param code code
     * @return 部门
     */
    Department findByCode(String code);

    /**
     * 根据UserId 查询部门
     *
     * @param userId 用户Id
     * @return 部门
     */
    List<Department> findByUserId(String userId);

    /**
     * 根据code,id 查询部门
     *
     * @param code code
     * @param id   id
     * @return 部门
     */
    Department findByCodeAndId(String code, String id);

    /**
     * 传入父类ID 获得树形结构
     *
     * @param parentId 组织机构Id
     * @return 部门树形结构
     */
    List<Tree> getDepartmentTree(String parentId);

    /**
     * 根据userId 返回 当前用户所属部门下与职位的tre
     *
     * @param userId 用户Id
     * @return 部门职位属性结构
     */
    List<Tree> getDeptAndDutyTreeByUserId(String userId);

    /**
     * 根据条件查询
     *
     * @param paramMap 组织机构
     * @return 部门列表
     */
    List<Department> findByParam(Map paramMap);

    /**
     * 根据条件查询数量
     *
     * @param paramMap 组织机构
     * @return 部门数量
     */
    Integer findByParamCount(Map paramMap);

    /**
     * 添加
     *
     * @param paramMap 组织机构Id
     * @return 添加结果
     */
    Integer add(Map paramMap);

    /**
     * 修改
     *
     * @param paramMap 组织机构Id
     * @return 修改结构
     */
    Integer updateById(Map paramMap);

    /**
     * 根据id数组查询名称列表
     * @param ids id集合
     * @return 名称列表
     */
    List<String> selectNamesByIds(List<String> ids);
}
